package com.smcdd.cdb.dbo.cdb_dbo.ui.utils;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.TranslateAnimation;

/**
 * 作者：Administrator on 2017/7/18 16:15
 * 邮箱：zhanghuaiha@gmail.com
 */

public class AnimationUtil {
    private static final String TAG = AnimationUtil.class.getSimpleName();

    /**
     * 从控件所在位置移动到控件的底部
     *
     * @return
     */
    public static TranslateAnimation moveToViewBottom() {
        TranslateAnimation mHiddenAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
                0.0f, Animation.RELATIVE_TO_SELF, 1.0f);
        mHiddenAction.setDuration(500);
        return mHiddenAction;
    }

    /**
     * 展开隐藏动画
     * @param context
     * @param view
     * @param show
     */
    public static void setTrans(Context context,View view,boolean show){
        //View是否显示的标志

        //属性动画对象
        ValueAnimator va ;
        if(show){
            //显示view，高度从0变到height值
            va = ValueAnimator.ofInt(0,DensityUtil.dip2px(context,85));
        }else{
            //隐藏view，高度从height变为0
            va = ValueAnimator.ofInt(DensityUtil.dip2px(context,85),0);
        }
        va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                //获取当前的height值
                int h =(Integer)valueAnimator.getAnimatedValue();
                //动态更新view的高度
                view.getLayoutParams().height = h;
                view.requestLayout();
            }
        });
        va.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                if (!show) {
                    view.setVisibility(View.GONE);
                }
            }
        });
        va.setDuration(400);
        //开始动画
        va.start();
    }

    /**
     * 旋转动画
     * @param view
     */
    public static void setRotate(View view){
        ObjectAnimator anim = ObjectAnimator.ofFloat(view, "rotation", 0f, 180f);
        anim.setDuration(500);
        anim.start();
    }

    /**
     * 旋转动画
     * @param view
     */
    public static void setRotate2(View view){
        ObjectAnimator anim = ObjectAnimator.ofFloat(view, "rotation", 180f, 360f);
        anim.setDuration(500);
        anim.start();
    }

    public static void tranTop(Context context,View view){
        AnimationSet animationSet = new AnimationSet(true);
        TranslateAnimation translateAnimation = new TranslateAnimation(
                //X轴初始位置
                Animation.RELATIVE_TO_SELF,0.0f,
                //X轴移动的结束位置
                Animation.RELATIVE_TO_SELF,0.0f,
                //y轴开始位置
                Animation.RELATIVE_TO_SELF,-1.0f,
                //y轴移动后的结束位置
                Animation.RELATIVE_TO_SELF,0.0f);

        //3秒完成动画
        translateAnimation.setDuration(500);
        //如果fillAfter的值为真的话，动画结束后，控件停留在执行后的状态
        animationSet.setFillAfter(true);
        //将AlphaAnimation这个已经设置好的动画添加到 AnimationSet中
        animationSet.addAnimation(translateAnimation);
        //启动动画
        view.startAnimation(animationSet);
    }

    public static void tranBotton(Context context,View view){
        AnimationSet animationSet = new AnimationSet(true);
        TranslateAnimation translateAnimation = new TranslateAnimation(
                //X轴初始位置
                Animation.RELATIVE_TO_SELF,0.0f,
                //X轴移动的结束位置
                Animation.RELATIVE_TO_SELF,0.0f,
                //y轴开始位置
                Animation.RELATIVE_TO_SELF,0.0f,
                //y轴移动后的结束位置
                Animation.RELATIVE_TO_SELF,-1.0f);

        //3秒完成动画
        translateAnimation.setDuration(500);
        //如果fillAfter的值为真的话，动画结束后，控件停留在执行后的状态
        animationSet.setFillAfter(true);
        //将AlphaAnimation这个已经设置好的动画添加到 AnimationSet中
        animationSet.addAnimation(translateAnimation);
        //启动动画
        view.startAnimation(animationSet);
    }


    public static void tranIn(Context context,View view){
        /*
                AnimationSet相当于一个动画的集合，true表示使用Animation的interpolator
                false则是使用自己的。
                Interpolator 被用来修饰动画效果，定义动画的变化率，可以使存在的动画效果
                accelerated(加速)，decelerated(减速),repeated(重复),bounced(弹跳)等。
             */
        AnimationSet animationSet = new AnimationSet(true);
            /*
                    Animation还有几个方法
                    setFillAfter(boolean fillAfter)
                    如果fillAfter的值为真的话，动画结束后，控件停留在执行后的状态
                    setFillBefore(boolean fillBefore)
                    如果fillBefore的值为真的话，动画结束后，控件停留在动画开始的状态
                    setStartOffset(long startOffset)
                    设置动画控件执行动画之前等待的时间
                    setRepeatCount(int repeatCount)
                    设置动画重复执行的次数
             */
        TranslateAnimation translateAnimation = new TranslateAnimation(
                //X轴初始位置
                Animation.RELATIVE_TO_SELF, 0.8f,
                //X轴移动的结束位置
                Animation.RELATIVE_TO_SELF,0.0f,
                //y轴开始位置
                Animation.RELATIVE_TO_SELF,0.0f,
                //y轴移动后的结束位置
                Animation.RELATIVE_TO_SELF,0.0f);

        //3秒完成动画
        translateAnimation.setDuration(500);
        //如果fillAfter的值为真的话，动画结束后，控件停留在执行后的状态
        animationSet.setFillAfter(true);
        //将AlphaAnimation这个已经设置好的动画添加到 AnimationSet中
        animationSet.addAnimation(translateAnimation);
        //启动动画
        view.startAnimation(animationSet);
    }

    public static void tranOut(Context context,View view){
        AnimationSet animationSet = new AnimationSet(true);
        TranslateAnimation translateAnimation = new TranslateAnimation(
                //X轴初始位置
                Animation.RELATIVE_TO_SELF,0.0f,
                //X轴移动的结束位置
                Animation.RELATIVE_TO_SELF,0.8f,
                //y轴开始位置
                Animation.RELATIVE_TO_SELF,0.0f,
                //y轴移动后的结束位置
                Animation.RELATIVE_TO_SELF,0.0f);

        //3秒完成动画
        translateAnimation.setDuration(500);
        //如果fillAfter的值为真的话，动画结束后，控件停留在执行后的状态
        animationSet.setFillAfter(true);
        //将AlphaAnimation这个已经设置好的动画添加到 AnimationSet中
        animationSet.addAnimation(translateAnimation);
        //启动动画
        view.startAnimation(animationSet);
    }

    /**
     * 从控件的底部移动到控件所在位置
     *
     * @return
     */
    public static TranslateAnimation moveToViewLocation() {
        TranslateAnimation mHiddenAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
                1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
        mHiddenAction.setDuration(500);
        return mHiddenAction;
    }


    //待维护门店引导动画
    public static void tranTain(Context context,View view){
        AnimationSet animationSet = new AnimationSet(true);
        TranslateAnimation translateAnimation = new TranslateAnimation(
                //X轴初始位置
                Animation.RELATIVE_TO_SELF,0.0f,
                //X轴移动的结束位置
                Animation.RELATIVE_TO_SELF,0.5f,
                //y轴开始位置
                Animation.RELATIVE_TO_SELF,0.0f,
                //y轴移动后的结束位置
                Animation.RELATIVE_TO_SELF,-1.2f);

        //3秒完成动画
        translateAnimation.setDuration(1000);
        //如果fillAfter的值为真的话，动画结束后，控件停留在执行后的状态
        animationSet.setFillAfter(true);
        //将AlphaAnimation这个已经设置好的动画添加到 AnimationSet中
        animationSet.addAnimation(translateAnimation);
        //启动动画
        view.startAnimation(animationSet);
    }
}
